from django.db import models
from django.core.exceptions import ValidationError


class Procedure(models.Model):
    """Модель медицинской процедуры"""
    name = models.TextField(verbose_name="Название процедуры", blank=False, null=False)
    description = models.TextField(verbose_name="Описание процедуры", blank=True, null=True)
    duration = models.DurationField(verbose_name="Продолжительность процедуры", blank=False, null=False)
    min_research_count = models.DecimalField(verbose_name="Минимальное количество исследований",
                                             max_digits=10, decimal_places=2,
                                             blank=False, null=False, default=0)
    max_research_count = models.DecimalField(verbose_name="Максимальное количество исследований",
                                             max_digits=10, decimal_places=2,
                                             blank=False, null=False, default=0)
    price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name="Цена процедуры",
                                blank=False, null=False)
    specialization = models.ForeignKey('users.SpecializationType', on_delete=models.CASCADE,
                                       related_name='procedures', verbose_name="Специализация")

    class Meta:
        db_table = "procedure"

    def __str__(self):
        return f"{self.name} - {self.price} руб."

    def clean(self):
        super().clean()
        self.validate_positive(self.price)
        self.validate_positive(self.min_research_count)
        self.validate_positive(self.max_research_count)

    @staticmethod
    def validate_positive(value):
        if value < 0:
            raise ValidationError('Значение должно быть положительным')
